<template>
    <div class="app-container">
        <!-- 查询和其他操作 -->
        <div class="filter-container">
            <el-input v-model="listQuery.question" clearable class="filter-item" style="width: 200px;"
                placeholder="请输入问题" />
            <el-button v-permission="['GET /admin/issue/list']" class="filter-item" type="primary" icon="el-icon-search"
                @click="handleFilter">查找</el-button>
            <el-button v-permission="['POST /admin/issue/create']" class="filter-item" type="primary"
                icon="el-icon-edit" @click="handleCreate">添加</el-button>
            <el-button :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download"
                @click="handleDownload">导出</el-button>
        </div>

        <!-- 查询结果 -->
        <el-table v-loading="listLoading" :data="list" size="small" element-loading-text="正在查询中。。。" border fit
            highlight-current-row>
            <el-table-column align="center" width="100px" label="问题ID" prop="id" sortable />

            <el-table-column align="center" min-width="200px" label="问题内容" prop="question" />

            <el-table-column align="center" min-width="400px" label="问题回复" prop="answer" />

            <el-table-column align="center" label="操作" width="250" class-name="small-padding fixed-width">
                <template slot-scope="scope">
                    <el-button v-permission="['POST /admin/issue/update']" type="primary" size="mini"
                        @click="handleUpdate(scope.row)">编辑</el-button>
                    <el-button v-permission="['POST /admin/issue/delete']" type="danger" size="mini"
                        @click="handleDelete(scope.row)">删除</el-button>
                </template>
            </el-table-column>
        </el-table>

        <pagination v-show="total > 0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit"
            @pagination="getList" />

        <!-- 添加或修改对话框 -->
        <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
            <el-form ref="dataForm" :rules="rules" :model="dataForm" status-icon label-position="left"
                label-width="100px" style="width: 400px; margin-left:50px;">
                <el-form-item label="问题" prop="question">
                    <el-input v-model="dataForm.question" />
                </el-form-item>
                <el-form-item label="回复" prop="answer">
                    <el-input v-model="dataForm.answer" :rows="8" type="textarea" placeholder="请输入内容" />
                </el-form-item>
            </el-form>
            <div slot="footer" class="dialog-footer">
                <el-button @click="dialogFormVisible = false">取消</el-button>
                <el-button v-if="dialogStatus == 'create'" type="primary" @click="createData">确定</el-button>
                <el-button v-else type="primary" @click="updateData">确定</el-button>
            </div>
        </el-dialog>

    </div>
</template>
<script>
import { listIssue, createIssue, updateIssue, deleteIssue } from '@/api/issue'
import Pagination from '@/components/Pagination'

export default {
    name: 'Issue',
    components: {
        Pagination
    },
    data() {
        return {
            list: null,
            total: 0,
            listLoading: false,
            listQuery: {
                page: 1,
                limit: 20,
                question: undefined,
                sort: 'add_time',
                order: 'desc'
            },
            dataForm: {
                id: undefined,
                question: '',
                answer: ''
            },
            dialogFormVisible: false,
            dialogStatus: '',
            textMap: {
                update: '编辑',
                create: '创建'
            },
            rules: {
                question: [{ required: true, message: '问题不能为空', trigger: 'blur' }],
                answer: [{ required: true, message: '回复不能为空', trigger: 'blur' }]
            },
            downloadLoading: false
        }
    },
    methods: {
        getList() {
            this.listLoading = true
            listIssue(this.listQuery).then(response => {
                this.list = response.data.data.items
                this.total = response.data.data.total
                this.listLoading = false
            }).catch(() => {
                this.list = []
                this.total = 0
                this.listLoading = false
            })
        },
        handleFilter() {
            this.listQuery.page = 1
            this.getList()
        },
        resetForm() {
            this.dataForm = {
                id: undefined,
                question: '',
                answer: ''
            }
        },
        handleCreate() {
            this.resetForm()
            this.dialogStatus = 'create'
            this.dialogFormVisible = true
            this.$nextTick(() => {
                this.$refs['dataForm'].clearValidate()
            })
        },
        createData() {
            this.$refs['dataForm'].validate((valid) => {
                if (valid) {
                    createIssue(this.dataForm).then(response => {
                        this.list.unshift(response.data.data)
                        this.dialogFormVisible = false
                        this.$notify.success({
                            title: '成功',
                            message: '创建成功'
                        })
                    }).catch(response => {
                        this.$notify.error({
                            title: '失败',
                            message: response.data.errmsg
                        })
                    })
                }
            })
        },
        handleUpdate(row) {
            this.dataForm = Object.assign({}, row)
            this.dialogStatus = 'update'
            this.dialogFormVisible = true
            this.$nextTick(() => {
                this.$refs['dataForm'].clearValidate()
            })
        },
        updateData() {
            this.$refs['dataForm'].validate((valid) => {
                if (valid) {
                    updateIssue(this.dataForm).then(() => {
                        for (const v of this.list) {
                            if (v.id === this.dataForm.id) {
                                const index = this.list.indexOf(v)
                                this.list.splice(index, 1, this.dataForm)
                                break
                            }
                        }
                        this.dialogFormVisible = false
                        this.$notify.success({
                            title: '成功',
                            message: '更新成功'
                        })
                    }).catch(response => {
                        this.$notify.error({
                            title: '失败',
                            message: response.data.errmsg
                        })
                    })
                }
            })
        },
        handleDelete(row) {
            deleteIssue(row).then(response => {
                this.$notify.success({
                    title: '成功',
                    message: '删除成功'
                })
                const index = this.list.indexOf(row)
                this.list.splice(index, 1)
            }).catch(response => {
                this.$notify.error({
                    title: '失败',
                    message: response.data.errmsg
                })
            })
        },
        handleDownload() {

        }
    },
    mounted() {
        this.getList()
    },
}
</script>
<style lang="">
    
</style>